/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package cz.muni.fi.diplomka.datalayer.dao;

import cz.muni.fi.diplomka.datalayer.entity.BuildingInCityEntity;
import cz.fi.muni.diplomka.common.Coordinates;
import cz.fi.muni.diplomka.common.enumeration.BuildingType;
import java.util.List;

/**
 * Interface for manipulation with Building In City Entity
 *
 * @author Jakub Kutil
 */
public interface BuildingInCityDao {

    /**
     * Add Building in City to DB
     *
     * @param buildingInCityEntity Building in City to add
     */
    public void addBuildingInCity(BuildingInCityEntity buildingInCityEntity);

    /**
     * Edits Building in City in DB
     *
     * @param buildingInCityEntity Building in City to edit
     */
    public void editBuildingInCity(BuildingInCityEntity buildingInCityEntity);

    /**
     * Deletes Building in City from DB
     *
     * @param cityId ID of City in which Building is
     * @param coordinates coordinates of Building to delete
     */
    public void deleteBuildingInCity(Long cityId, Coordinates coordinates);

    /**
     * Gets Building in City from City at specified position
     *
     * @param cityId ID of City in which Building is
     * @param coordinates oordinates of Building
     *
     * @return found Building in City of empty one if not found
     */
    public BuildingInCityEntity getBuildingInCityAtPosition(Long cityId, Coordinates coordinates);

    /**
     * Gets all Buildings in City in specified City
     *
     * @param cityId ID of city to look at
     *
     * @return List of found Buildings
     */
    public List<BuildingInCityEntity> getAllBuildingInCity(Long cityId);

    /**
     * Gets all Buildings in City in specified City
     *
     * @param cityId ID of city to look at
     * @param buildingType specified Building Type
     *
     * @return List of found Buildings od specified type
     */
    public List<BuildingInCityEntity> getAllBuildingInCityOfType(Long cityId, BuildingType buildingType);
}
